package top.taooc.serializer;

import top.taooc.spi.SpiLoader;

import java.util.HashMap;
import java.util.Map;

/**
 * @author songtao@guishangyi.cn
 * @date 2024年07月09日 11:35:01
 * @packageName top.taooc.serializer
 * @className SerializerFactory
 * @Menu
 */
public class SerializerFactory {

    static{
        SpiLoader.load(Serializer.class);
    }
    private static final Serializer DEFAULT_SERIALIZER = new JdkSerializer();

    /**
     * 获取实例
     * @param key
     * @return
     */
    public static Serializer getInstance(String key){
        return SpiLoader.getInstance(Serializer.class,key);
    }

//    /**
//     * 序列化隐射（用于实现单例）
//     */
//    private static final Map<String, Serializer> KEY_SERIALIZER_MAP = Map.ofEntries(
//            Map.entry(SerializerKeys.JDK, new JdkSerializer()),
//            Map.entry(SerializerKeys.JSON, new JsonSerializer()),
//            Map.entry(SerializerKeys.HESSIAN, new HessianSerializer()),
//            Map.entry(SerializerKeys.KRYO, new KryoSerializer())
//    );
//    /*private static final Map<String,Serializer> KEY_SERIALIZER_MAP = new HashMap<>(){{
//       put(serializerKeys.JDK,new JdkSerializer());
//       put(serializerKeys.JSON,new JsonSerializer());
//       put(serializerKeys.HESSIAN,new HessianSerializer());
//       put(serializerKeys.KRYO,new KryoSerializer());
//    }};*/
//
//    /**
//     * 默认序列化器
//     */
//    private static final Serializer DEFAULT_SERIALIZER = KEY_SERIALIZER_MAP.get(SerializerKeys.JDK);
//
//    /**
//     * 获取实例
//     * @param key
//     * @return
//     */
//    public static Serializer getInstance(String key){
//        //该函数的功能是从KEY_SERIALIZER_MAP中获取与给定key对应的值，如果key不存在，则返回默认值DEFAULT_SERIALIZER。
//        return KEY_SERIALIZER_MAP.getOrDefault(key,DEFAULT_SERIALIZER);
//    }
}
